package client.controleur;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import modele.Puissance;
import client.vue.CreerPartieReseau;
import client.vue.Vue;
import codebase.IJoueur;
import codebase.IPartie;

public class CreerPartieReseauxActionListener implements ActionListener, Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private CreerPartieReseau vue;
	private IPartie partie;
	private IJoueur joueur;
	private int ind = 0;

	public CreerPartieReseauxActionListener(CreerPartieReseau fenetre, IPartie partie,
			IJoueur joueur) {
		this.vue = fenetre;
		this.partie = partie;
		this.joueur = joueur;
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		JButton boutton = (JButton) arg0.getSource();
		if (boutton.equals(vue.getBoutonRetour())) {
			try {
				partie.supprimerJoueur(joueur);
			} catch (RemoteException e) {
				e.printStackTrace();
			}
			Vue.changeFenetre("Accueil");
		} else if (boutton.equals(vue.getBoutonLancerPartie())) {
			try {
				if (partie.getNbJoueurs() != partie.getConfig().getNbJoueurs()) {
					int n = Math.abs(partie.getNbJoueurs() - partie.getConfig().getNbJoueurs());
					JOptionPane.showMessageDialog(new JFrame("Erreur"), "Il manque " + n
							+ " joueur(s) pour lancer la partie.\n Ou changez le "
							+ "nombre de joueur.");
				} else {
					if (ind == 0) {
						// partie.initElementCarteDepart();
						partie.afficheEtatPartie();
						partie.passerAuJeu();
						ind++;
					} else
						System.out.println("pas normal");
				}
			} catch (RemoteException e) {
				e.printStackTrace();
			}

		} else if (boutton.equals(vue.getBoutonEnvoyerMsg())) {
			try {
				if (!vue.getTextFieldChatSend().getText().equals("")) {
					partie.envoyerMessage(joueur.getNom() + " : "
							+ vue.getTextFieldChatSend().getText());
				}
			} catch (RemoteException e) {
				e.printStackTrace();
			}
			vue.getTextFieldChatSend().setText("");
		} else if (vue.getListeBoutonsPuissance().indexOf(boutton) >= 0) {
			int pos = vue.getListeBoutonsPuissance().indexOf(boutton);
			for (JLabel label : vue.getListeChoixPuissance()) {
				try {
					if (label.getText().equals(joueur.getNom()))
						label.setText("");
				} catch (RemoteException e) {
					e.printStackTrace();
				}
			}
			try {
				ArrayList<ArrayList<Puissance>> list = partie.getConfig().getListePuissance();

				vue.getListeChoixPuissance().get(pos).setText(joueur.getNom());

				// efface puissance sélectionné
				partie.gerePuissanceJoueur(1, joueur, null);

				partie.gerePuissanceJoueur2(joueur, list.get(pos));

				/*
				 * for (Puissance p : list.get(pos)) { System.out.println("4");
				 * partie.gerePuissanceJoueur(0, joueur, p);
				 * joueur.addPuissance(p); }
				 */
			} catch (RemoteException e) {
				e.printStackTrace();
			}

		}
	}
}
